require.config({
    baseUrl: "./modules",
    paths:{
        jq: "../data/jquery",
        gd: "getData",
        cr: "cartRender",
        cl: "changeLocal",
        an: "allNum",
        ap: "allPrice"
    }
})
require(["jq","gd","cr","cl","an","ap"],function(_,getData,abc,changeLocal,allNum,allPrice){
    // 1. 获取本地数据
    let goods = localStorage.getItem("goods") ? JSON.parse(localStorage.getItem("goods")) : [];

    // 2. 根据本地数据，获取服务器数据
    goods.forEach(val=>{
        getData({
            data:{
                type: "getDetail",
                id: val.id
            },
            success:res=>{
                // 3. 渲染页面
                abc($(".five"),res,val);
            }
        })
    })

    // 3. 事件委托绑定事件
    // 3-1.单个选中
    $(".five").on("change",".check",function(){
        const f = this.checked;
        const id = $(this).parent().attr("index");
        changeLocal(goods,id,function(i){
            goods[i].flag = Number(f);
            // console.log(goods[i]);
        })

        // 根据单个选中决定是否全选
        $("#quanxuan")[0].checked = goods.every(val=>val.flag);

        // 计算总数量
        $("#allNum").html(allNum(goods));

        // 计算总价
        $("#allPrice").html(allPrice(goods));
    })
    // 3-2.修改数量
    $(".five").on("input",".setNum",function(){
        const id = $(this).parent().parent().attr("index");
        // console.log(id);
        const num = Number($(this).val());
        changeLocal(goods,id,function(i){
            goods[i].num = num;
            $(".abc")[i].innerHTML = $(".fiveg")[i].innerHTML * $(".setNum")[i].value;
        })
        
        // 计算总数量
        $("#allNum").html(allNum(goods));

        // 计算总价
        $("#allPrice").html(allPrice(goods));
    })
    // 3-3.删除商品
    $(".five").on("click",".del",function(){
        const id = $(this).parent().parent().attr("index");
        $(this).parent().parent().remove()
        changeLocal(goods,id,function(i){
            goods.splice(i, 1);
        })

        // 根据单个选中决定是否全选
        $("#quanxuan")[0].checked = goods.every(val=>val.flag);

        // 计算总数量
        $("#allNum").html(allNum(goods));

        // 计算总价
        $("#allPrice").html(allPrice(goods));
    })
    // 4. 绑定全选事件
    $("#quanxuan").change(function(){
        // 修改所有的复选框的选中状态
        for(let i=0;i<$(".check").length;i++){
            $(".check")[i].checked = this.checked;
        }
        // 修改所有数据的选中状态
        goods.forEach(val=>{
            val.flag = Number(this.checked)
        })
        localStorage.setItem("goods",JSON.stringify(goods))
        
        localStorage.setItem("goods",JSON.stringify(goods.map(val=>{
            val.flag = Number(this.checked)
            return val;
        })))
        
        // 计算总数量
        $("#allNum").html(allNum(goods));
        
        // 计算总价
        $("#allPrice").html(allPrice(goods));
    })
    console.log($(".check"));
    // 5. 根据单个选中决定是否全选
    $("#quanxuan").checked = goods.every(val=>val.flag);
    

    // console.log($("#allPrice")[0]);
    // console.log($("#allNum")[0]);
    // 6. 计算总数量
    $("#allNum").html(allNum(goods));
    // 7. 计算总价
    $("#allPrice").html(allPrice(goods));

    // 8. 绑定删除选中的事件
    console.log($(".check"));
    $("#delFlag")[0].click(function(){
        // 从程序中删除商品
        goods = goods.filter(val=>{
            return !val.flag;
        })
        // 从本地数据中删除商品
        localStorage.setItem("goods",JSON.stringify(goods))
        const acheck = document.querySelectorAll(".check")
        for(let i=0;i<acheck.length;i++){
            if(acheck[i].checked){
                acheck[i].parentNode.parentNode.remove();
            }
        }
        // 从DOM中删除商品
        $.each($(".check"),(idx,val)=>{
            if(val.checked){
                val.parentNode.parentNode.remove()
            }
        })
    })
})